﻿Imports System.Data.OleDb
Module querysAtencion
    Public Class C_querys

        Public Function QxAsesorEntreFechas() As OleDbDataReader
            Using cadenaConexBD()
                Dim drQxAentreF As OleDbDataReader
                'parametrizo las fechas de inicio y fin del informe
                Dim fechaInicio As New OleDbParameter("@fechIni", SqlDbType.Date)
                fechaInicio.Value = frmInfoAsesorAtencion.dtpInicio.Value
                Dim fechaFin As New OleDbParameter("@fechFin", SqlDbType.Date)
                fechaFin.Value = frmInfoAsesorAtencion.dtpfin.Value
                'parametro del auditado
                Dim bucarAuditadoxId As New OleDbCommand("Select id_ado from auditado where noap_ado = '" & frmInfoAsesorAtencion.cbo_asesor.Text & "'", cadenaConexBD)
                Dim idAuditado = bucarAuditadoxId.ExecuteScalar()
                'cadenaConexBD()
                Dim instruccion As New OleDbCommand("SELECT llamada.fau_llam, llamada.fec_llam, llamada.nlot_llam, tipo_llamada.desc_tllam, auditor.noap_au, auditado.noap_ado, empresa.nomb_empr, saludo.opt_salu, empatia.opt_emp, indagacion.opt_ind, disposicion.opt_disp, compromiso.opt_comp, informacion.opt_info, comunicacion.opt_com, credibilidad.opt_cred, cierre.opt_cie, llamada.tfav_llam, llamada.tctra_llam, llamada.vato_llam, llamada.idunico_llam,llamada.caso_llam FROM (((((((((((((llamada Inner Join tipo_llamada ON((llamada.id_tllam = tipo_llamada.id_tllam))) Inner Join auditor ON((llamada.id_au = auditor.id_au))) Inner Join auditado ON((llamada.id_ado = auditado.id_ado))) Inner Join saludo ON((llamada.vaop_salu = saludo.vaop_salu))) Inner Join empatia ON((llamada.vaop_emp = empatia.vaop_emp))) Inner Join indagacion ON((llamada.vaop_ind = indagacion.vaop_ind))) Inner Join disposicion ON((llamada.vaop_disp = disposicion.vaop_disp))) Inner Join compromiso ON((llamada.vaop_comp = compromiso.vaop_comp))) Inner Join informacion ON((llamada.vaop_info = informacion.vaop_info))) Inner Join comunicacion ON((llamada.vaop_com = comunicacion.vaop_com))) Inner Join credibilidad ON((llamada.vaop_cred = credibilidad.vaop_cred))) Inner Join cierre ON((llamada.vaop_cie = cierre.vaop_cie))) Inner Join empresa ON((auditado.id_empr = empresa.id_empr))) WHERE ((llamada.fau_llam BETWEEN @fechIni AND @fechFin) AND (llamada.id_ado = " & idAuditado & "))", cadenaConexBD)
                ' Dim instruccion As New OleDbCommand("select llamada.fau_llam, llamada.fec_llam, llamada.nlot_llam, tipo_llamada.desc_tllam, auditor.noap_au, auditado.noap_ado, empresa.nomb_empr, saludo.opt_salu, empatia.opt_emp, indagacion.opt_ind, disposicion.opt_disp, compromiso.opt_comp, informacion.opt_info, comunicacion.opt_com, credibilidad.opt_cred, cierre.opt_cie, llamada.tfav_llam, llamada.tctra_llam, llamada.vato_llam, llamada.idunico_llam from (((((((((((((llamada Inner Join tipo_llamada on((llamada.id_tllam = tipo_llamada.id_tllam))) Inner Join auditor on((llamada.id_au = auditor.id_au))) Inner Join auditado on((llamada.id_ado = auditado.id_ado))) Inner Join saludo on((llamada.vaop_salu = saludo.vaop_salu))) Inner Join empatia on((llamada.vaop_emp = empatia.vaop_emp))) Inner Join indagacion on((llamada.vaop_ind = indagacion.vaop_ind))) Inner Join disposicion on((llamada.vaop_disp = disposicion.vaop_disp))) Inner Join compromiso on((llamada.vaop_comp = compromiso.vaop_comp))) Inner Join informacion on((llamada.vaop_info = informacion.vaop_info))) Inner Join comunicacion on((llamada.vaop_com = comunicacion.vaop_com))) Inner Join credibilidad on((llamada.vaop_cred = credibilidad.vaop_cred))) Inner Join cierre on((llamada.vaop_cie = cierre.vaop_cie))) Inner Join empresa on((auditado.id_empr = empresa.id_empr))) WHERE ((llamada.fau_llam >= @fechIni) and (llamada.fau_llam <= @fechFin) and (llamada.id_ado = " & idAuditado & "))", cadenaConexBD)
                'llamada.fau_llam BETWEEN @fechIni AND @fechFin
                instruccion.Parameters.Add(fechaInicio)
                instruccion.Parameters.Add(fechaFin)
                drQxAentreF = instruccion.ExecuteReader()
                Return drQxAentreF
                drQxAentreF.Close()
            End Using
        End Function

        'REPORTE POR EMPRESAS EN AUDITORIA DE ATENCION
        '------------------------------------------------
        Public Function QxEmpresaEntreFechas() As OleDbDataReader
            Using cadenaConexBD()
                Dim drQxEentreF As OleDbDataReader
                'parametrizo las fechas de inicio y fin del informe
                Dim fechaInicio As New OleDbParameter("@fechIni", SqlDbType.Date)
                fechaInicio.Value = frmInfoEmprAtencion.dtpInicio.Value
                Dim fechaFin As New OleDbParameter("@fechFin", SqlDbType.Date)
                fechaFin.Value = frmInfoEmprAtencion.dtpfin.Value
                'parametro del auditado
                Dim bucarEmpresaxId As New OleDbCommand("SELECT id_empr FROM empresa WHERE nomb_empr = '" & frmInfoEmprAtencion.cbo_empresa.Text & "'", cadenaConexBD)
                Dim idEmpresa = bucarEmpresaxId.ExecuteScalar()
                'cadenaConexBD()
                Dim instruccion As New OleDbCommand("SELECT llamada.fau_llam, llamada.fec_llam, llamada.nlot_llam, tipo_llamada.desc_tllam, auditor.noap_au, auditado.noap_ado, empresa.nomb_empr, saludo.opt_salu, empatia.opt_emp, indagacion.opt_ind, disposicion.opt_disp, compromiso.opt_comp, informacion.opt_info, comunicacion.opt_com, credibilidad.opt_cred, cierre.opt_cie, llamada.tfav_llam, llamada.tctra_llam, llamada.vato_llam, llamada.idunico_llam, caso_llam FROM (((((((((((((llamada Inner Join tipo_llamada ON((llamada.id_tllam = tipo_llamada.id_tllam))) Inner Join auditor ON((llamada.id_au = auditor.id_au))) Inner Join auditado ON((llamada.id_ado = auditado.id_ado))) Inner Join saludo ON((llamada.vaop_salu = saludo.vaop_salu))) Inner Join empatia ON((llamada.vaop_emp = empatia.vaop_emp))) Inner Join indagacion ON((llamada.vaop_ind = indagacion.vaop_ind))) Inner Join disposicion ON((llamada.vaop_disp = disposicion.vaop_disp))) Inner Join compromiso ON((llamada.vaop_comp = compromiso.vaop_comp))) Inner Join informacion ON((llamada.vaop_info = informacion.vaop_info))) Inner Join comunicacion ON((llamada.vaop_com = comunicacion.vaop_com))) Inner Join credibilidad ON((llamada.vaop_cred = credibilidad.vaop_cred))) Inner Join cierre ON((llamada.vaop_cie = cierre.vaop_cie))) Inner Join empresa ON((llamada.id_empr = empresa.id_empr))) WHERE ((llamada.fau_llam BETWEEN @fechIni AND @fechFin) AND (llamada.id_empr = " & idEmpresa & "))", cadenaConexBD)
                instruccion.Parameters.Add(fechaInicio)
                instruccion.Parameters.Add(fechaFin)
                drQxEentreF = instruccion.ExecuteReader()
                Return drQxEentreF
                drQxEentreF.Close()
            End Using
        End Function

        'Devuelve el ranking de asesores EN ATENCION de una empresa entre 2 fechas NO CONTEMPLA EN EL RANKING
        'LAS LLAMADAS CLASIFICADAS COMO "NO AUDITABLES"
        '----------------------------------------------------------------
        Public Function QxAsesorRanking() As OleDbDataReader
            Using cadenaConexBD()
                Dim drQranking As OleDbDataReader
                'parametrizo las fechas de inicio y fin del informe
                Dim fechaInicio As New OleDbParameter("@fechIni", SqlDbType.Date)
                fechaInicio.Value = frmInfoRankingAtencion.dtpInicio.Value
                Dim fechaFin As New OleDbParameter("@fechFin", SqlDbType.Date)
                fechaFin.Value = frmInfoRankingAtencion.dtpfin.Value
                'parametro del tipo de llamada
                Dim tllamada As New OleDbParameter("@tllamada", SqlDbType.Text)
                tllamada.Value = "NO AUDITABLE"
                'parametro Empresa
                Dim bucarEmpresaxId As New OleDbCommand("Select id_empr from empresa where nomb_empr = '" & frmInfoRankingAtencion.cbo_empresa.Text & "'", cadenaConexBD)
                Dim idEmpresa = bucarEmpresaxId.ExecuteScalar()
                cadenaConexBD()

                'En esta consulta se agruegó el filtro por tipo de llamada discriminando las NO AUDITABLES
                Dim instruccion As New OleDbCommand("SELECT auditado.noap_ado, AVG(llamada.vato_llam) FROM ((llamada INNER JOIN auditado ON ((llamada.id_ado = auditado.id_ado))) INNER JOIN tipo_llamada ON ((llamada.id_tllam = tipo_llamada.id_tllam))) WHERE ((llamada.id_empr = " & idEmpresa & ") AND (llamada.fau_llam BETWEEN @fechIni AND @fechFin) AND (tipo_llamada.desc_tllam <> @tllamada)) GROUP BY auditado.noap_ado ORDER BY AVG(llamada.vato_llam) DESC", cadenaConexBD)

                'agrego y paso valores de los parametros
                instruccion.Parameters.Add(fechaInicio)
                instruccion.Parameters.Add(fechaFin)
                instruccion.Parameters.Add(tllamada)

                drQranking = instruccion.ExecuteReader()
                Return drQranking
                drQranking.Close()
            End Using
        End Function

        'ingresar datos a la tambla temporal para generar el reporte de asesores EN AUDITORIA DE ATENCION
        '------------------------------------------------------------------------------------------------
        Public Sub insertarTemporal(ByVal v01 As String, ByVal v02 As String, ByVal v03 As String, ByVal v04 As String, ByVal v05 As String, ByVal v06 As String, ByVal v07 As String, ByVal v08 As String, ByVal v09 As String, ByVal v10 As String, ByVal v11 As String, ByVal v12 As String, ByVal v13 As String, ByVal v14 As String, ByVal v15 As String, ByVal v16 As String, ByVal v17 As String, ByVal v18 As String, ByVal v19 As Double, ByVal v20 As String, ByVal v21 As String)
            Try
                cadenaConexBD()
                'inserccion de datos a la tabla
                Dim instruccion As New OleDbCommand("Insert into temporal_reportes (fecha_auditoria, fecha_llamada, numero_lote, tipo_llamada, auditor, auditado, empresa, saludo, empatia, indagacion, disposicion, compromiso, informacion, comunicacion, credibilidad, cierre, a_favor, en_contra, puntos, idunico_llam,caso_llam) values ('" & v01 & "','" & v02 & "','" & v03 & "','" & v04 & "','" & v05 & "','" & v06 & "','" & v07 & "','" & v08 & "','" & v09 & "','" & v10 & "','" & v11 & "','" & v12 & "','" & v13 & "','" & v14 & "','" & v15 & "','" & v16 & "','" & v17 & "','" & v18 & "','" & v19 & "','" & v20 & "','" & v21 & "')", cadenaConexBD)
                instruccion.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                cadenaConexBD.Close()
            End Try
        End Sub

        'ingresar datos a la tambla temporal para generar el reportes POR EMPRESAS EN AUDITORIA DE ATENCION
        '------------------------------------------------------------------------------------------------
        Public Sub insertarTemporalEmpresa(ByVal v01 As String, ByVal v02 As String, ByVal v03 As String, ByVal v04 As String, ByVal v05 As String, ByVal v06 As String, ByVal v07 As String, ByVal v08 As String, ByVal v09 As String, ByVal v10 As String, ByVal v11 As String, ByVal v12 As String, ByVal v13 As String, ByVal v14 As String, ByVal v15 As String, ByVal v16 As String, ByVal v17 As String, ByVal v18 As String, ByVal v19 As Double, ByVal v20 As String, ByVal v21 As String)
            Try
                cadenaConexBD()
                'inserccion de datos a la tabla "temporal_empresa_at"
                Dim instruccion As New OleDbCommand("Insert into temporal_empresa_at (fecha_auditoria, fecha_llamada, numero_lote, tipo_llamada, auditor, auditado, empresa, saludo, empatia, indagacion, disposicion, compromiso, informacion, comunicacion, credibilidad, cierre, a_favor, en_contra, puntos, idunico_llam, caso_llam) values ('" & v01 & "','" & v02 & "','" & v03 & "','" & v04 & "','" & v05 & "','" & v06 & "','" & v07 & "','" & v08 & "','" & v09 & "','" & v10 & "','" & v11 & "','" & v12 & "','" & v13 & "','" & v14 & "','" & v15 & "','" & v16 & "','" & v17 & "','" & v18 & "','" & v19 & "','" & v20 & "','" & v21 & "')", cadenaConexBD)
                instruccion.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                cadenaConexBD.Close()
            End Try
        End Sub

        'ingresar datos a la tambla temporal para generar el informe DE RANKING EN AUDITORIA DE ATENCION
        '------------------------------------------------------------------------------------------------
        Public Sub insertarTemporalRanking(ByVal v01 As String, ByVal v02 As Double)
            Try
                cadenaConexBD()
                'inserccion de datos a la tabla
                Dim instruccion As New OleDbCommand("Insert into temporal_ranking (noap_ado, promedio_ado) values ('" & v01 & "','" & v02 & "')", cadenaConexBD)
                instruccion.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                cadenaConexBD.Close()
            End Try
        End Sub

        'vaciar la tabla temporal cuando se generen nuevos informes AUDITORIA ATENCION-REPORTE POR ASESORES
        Public Sub eliminarTemporales()
            Try
                cadenaConexBD()
                Dim instruccion As New OleDbCommand("delete * from temporal_reportes ", cadenaConexBD)
                instruccion.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                cadenaConexBD.Close()
            End Try
        End Sub

        'vaciar la tabla temporal cuando se generen nuevos informes POR EMPRESA -AUDITORIA ATENCION-REPORTE- 
        Public Sub eliminarTemporalesPorEmpresaAT()
            Try
                cadenaConexBD()
                Dim instruccion As New OleDbCommand("delete * from temporal_empresa_at ", cadenaConexBD)
                instruccion.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                cadenaConexBD.Close()
            End Try
        End Sub

        'vaciar la tabla temporal_ranking cuando se generen nuevos informes de Ranking AUDITORIA - ATENCION
        Public Sub eliminarTemporalesRanking()
            Try
                cadenaConexBD()
                Dim instruccion As New OleDbCommand("delete * from temporal_ranking ", cadenaConexBD)
                instruccion.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                cadenaConexBD.Close()
            End Try
        End Sub

    End Class
End Module
